home *** CD-ROM | disk | FTP | other *** search
- /*
- FinalWriter2Text
- EvenMore FileIO plugin
- Author: Chris Perver
- Copyright (c) 2001
- */
-
-
- OPT REG=5
-
- LIBRARY 'amigawriter2text.plugin',1,1,'AmigaWriter2Text 1.00' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
-
- MODULE 'tools/ctype', '*epo'
-
- DEF mem2, len2
-
-
- PROC em_isdatatype(memadr, lenadr)
- DEF vers = FALSE
- DEF w:PTR TO LONG
-
- -> Check for FORM header
-
- w := Long(memadr)
- IF w = $00014559
- w := Long(memadr + 4)
- IF w = $57520002 THEN vers := TRUE
- ENDIF
- ENDPROC vers
-
-
- PROC em_parsedata(memadr, lenadr)
- DEF count = 0, count2 = 0
- DEF wordwrap = 80, notdonewrapping = TRUE, currchar = 0
- DEF notdone = TRUE
- -> Allocate memory for file
- -> IF (mem2 := New(lenadr + 1)) = NIL THEN RETURN -1
- -> mem2[lenadr + 1] := "\n" -> Put safety LF at the end of mem
- DEF w:PTR TO LONG, w2:PTR TO LONG, textcount = 0, slen = 0
- -> DEF iswtxt = FALSE
- DEF c, oldpos, oldcc
- DEF eof
-
- mem2 := memadr
-
- -> FIND START OF TEXT
- WHILE (textcount < 2) AND (count < lenadr)
- WHILE memadr[count] <> "S" DO INC count
- IF Long(memadr+count) = "STOP"
- count := count + 4
- IF Long(memadr + count) = "STOP"
- count := count + 4
- IF Long(memadr + count) = "NEXT"
- count := count + 4
- INC textcount
- ENDIF
- ENDIF
- ENDIF
- INC count
- ENDWHILE
- count := count + 4
- WHILE (memadr[count] < $2e) AND (count < lenadr) DO INC count
- DEC count
-
- -> FIND END OF TEXT
- notdone := TRUE
- eof := count
- WHILE notdone AND (eof < lenadr)
- SELECT 256 OF memadr[eof]
- CASE $00
- SELECT 256 OF memadr[eof+1]
- CASE "S"
- IF Long(memadr + eof+1) = "STOP" THEN notdone := FALSE
- CASE "N"
- IF Long(memadr + eof+1) = "NEXT" THEN notdone := FALSE
- ENDSELECT
- INC eof
- DEFAULT
- INC eof
- ENDSELECT
- ENDWHILE
- notdone := TRUE
-
- WHILE notdone AND (count < eof)
-
- SELECT 256 OF memadr[count]
- CASE $00
- SELECT 256 OF memadr[count+1]
- CASE $09
- mem2[count2++] := "\n"
- mem2[count2++] := "\n"
- currchar := 0
-
- -> FINISH IF AT THE END OF THE DOC
- -> IF (memadr[count + 5] = $00) THEN notdone := FALSE
- CASE $0b
- mem2[count2++] := " "
- INC currchar
- ENDSELECT
- count := count + 2
-
- DEFAULT
- slen := memadr[count]
- INC count
- c := 0
- WHILE (c < slen)
- mem2[count2++] := memadr[count++]
- INC currchar
- INC c
- ENDWHILE
-
- -> WORDWRAP
- IF currchar >= wordwrap
- -> Find last space
- IF isspace(mem2[count2]) = TRUE
- mem2[count2++] := "\n"
- currchar := 0
- ELSE
- oldpos := count2
- oldcc := currchar
- WHILE isspace(mem2[count2]) = FALSE
- mem2[count2 + 1] := mem2[count2]
- DEC count2
- DEC currchar
- ENDWHILE
-
- INC count2
- mem2[count2] := "\n"
- currchar := oldcc - currchar
-
- count2 := oldpos + 1
- ENDIF
- ENDIF
-
- ENDSELECT
-
- ENDWHILE
-
-
- mem2[count2] := "\n"
-
- -> IF memadr
- -> Dispose(memadr); memadr := NIL
- -> ENDIF
- ENDPROC mem2, count2
- -><
-
- -> *** STANDARD PROCS FOR PLUGINS
-
-
- PROC em_main(epo:PTR TO em_pluginobj)
- mem2, len2 := em_parsedata(epo.buffer, epo.length)
- epo.buffer := mem2
- epo.length := len2
- RETURN TRUE
- ENDPROC
-
- PROC em_begin(epo:PTR TO em_pluginobj)
- DEF vers
- vers := em_isdatatype(epo.buffer, epo.length)
- IF vers
- RETURN TRUE
- ELSE
- RETURN FALSE
- ENDIF
-
- ENDPROC
-
- PROC em_end() IS EMPTY
-
- PROC em_info() IS 'AmigaWriter2Text 1.00'
-
- PROC em_pluginid() IS "FILE"
-
- PROC em_format() IS 'AmigaWriter'
-
- PROC main() IS EMPTY
-